package com.example.utilsMain;

import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.io.OutputStreamWriter;

@Slf4j
public class ALYUtils {
    //十六进制数转换通用解析类
    //十六进制转成本地可用数据

    /**
     *
     * @param body
     * @param start 可用内容 十六进制字符串起始位置
     * @param end 可用内容 十六进制字符串结束位置
     * @return
     */
    public String getAlgorithm(byte[] body, int start, int end) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : body) {
            // 使用 Formatter 格式化输出十六进制
            hexString.append(String.format("%02x", b));
        }
        if (hexString.length() > 18) {
            throw new RuntimeException("数据长度异常");
        } else {
            //日志打印检索数据
            log.info("content:{}", hexString);
            //十六进制字符串转换成十进制
            int decimal = Integer.parseInt(hexString.substring(start, end), 16);
            //为方便处理 统一使用 String类型返回方式
            return String.valueOf(decimal);
        }
    }

    //本地可用数据转十六进制发送给硬件
    //计算校验码
    //除校验码外的进制数需要自己手动输入
    public  String checkCodeToHex(char[] hex) {
//        hex = new char[]{0x68, 0xaa, 0x02, 0x08, 0x83};
        char checksum = 0;
        char byteValue = 0xff;
        for (int i = 0; i < hex.length; i++) {
            checksum = (char) (checksum + hex[i]);
        }
        checksum &= byteValue;
        return Integer.toHexString(checksum);
    }


    //十六进制字符串 缺少校验码的那个 转换成char[]类型数组
    public  char[] hexStringToCharArray(String hexString) {
        char[] result = new char[hexString.length() / 2];
        for (int i = 0; i < result.length; i++) {
            int index = i * 2;
            int hexValue = Integer.parseInt(hexString.substring(index, index + 2), 16);
            // 明确将解析出的十六进制值转换为对应的字符，保留原始大小写
            result[i] = (char) hexValue;
        }
        return result;
    }
    //本地数据转换16进制数=> D0,D1.....
    //需数据做预处理

    public String DataToHex(String data,int num) {
        if (num==1){
            return String.format("%02x", Integer.parseInt(data));
        }else {
            StringBuilder hexString = new StringBuilder();
            for (byte b : data.getBytes()) {
                // 使用 Formatter 格式化输出十六进制
                hexString.append(String.format("%02x", b));
            }
            log.info("hexString:{}", hexString);
            return hexString.toString();
        }
    }

}
